package com.demo.main.servlet;

import com.demo.main.service.BorrowRecordService;
import com.demo.main.utils.ServletUtil;
import com.demo.main.vo.BorrowRecordVo;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import static com.demo.main.utils.ServletUtil.PERMISSION_PATH_ADMIN;
import static com.demo.main.utils.ServletUtil.PERMISSION_PATH_USER;

/**
 * 处理借阅记录相关请求的Servlet类。
 */
@WebServlet({PERMISSION_PATH_USER + "/borrow_record_condition",
        PERMISSION_PATH_ADMIN + "/borrow_record_condition"})
public class BorrowRecordServlet extends HttpServlet {

    // 创建BorrowRecordService实例，用于处理借阅记录的业务逻辑。
    private final BorrowRecordService borrowRecordService = new BorrowRecordService();

    /**
     * 处理GET请求的方法。
     * 根据请求路径的不同，分别处理用户和管理员的借阅记录查询请求。
     *
     * @param request  HTTP请求对象
     * @param response HTTP响应对象
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) {
        // 创建ServletUtil实例，用于处理Servlet相关的工具方法。
        ServletUtil servletUtil = new ServletUtil(request, response);

        // 根据请求路径进行不同的处理。
        switch (servletUtil.getServletPath()) {
            case PERMISSION_PATH_USER + "/borrow_record_condition":
                // 创建BorrowRecordVo实例，用于封装借阅记录的条件查询参数。
                BorrowRecordVo borrowRecordVo = new BorrowRecordVo();

                // 如果当前会话角色是用户，则设置用户ID为当前会话的用户ID。
                if (servletUtil.getSessionRole().equals("user")) {
                    borrowRecordVo.setUserId(servletUtil.getSessionUserId(Integer.class));
                }

                // 调用handlePaginationAndCondition方法处理分页和条件查询。
                servletUtil.handlePaginationAndCondition(
                        borrowRecordService::findBorrowRecordSpecifiedCountByCondition, // 获取符合条件的记录总数
                        borrowRecordVo, // 查询条件
                        borrowRecordService::findBorrowRecordVoBySpecifiedCondition, // 获取符合条件的记录列表
                        PERMISSION_PATH_USER + "/view/borrow_record"); // 重定向路径
                break;
            case PERMISSION_PATH_ADMIN + "/borrow_record_condition":
                // 调用handlePaginationAndCondition方法处理分页和条件查询（管理员）。
                servletUtil.handlePaginationAndCondition(
                        borrowRecordService::findBorrowRecordSpecifiedCountByCondition, // 获取符合条件的记录总数
                        new BorrowRecordVo(), // 查询条件（空对象表示不限制条件）
                        borrowRecordService::findBorrowRecordVoBySpecifiedCondition, // 获取符合条件的记录列表
                        PERMISSION_PATH_ADMIN + "/view/borrow_record"); // 重定向路径
                break;
        }
    }
}